<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta http-equiv="cache-control" content="no-cache">
<title>Genivia - Debugging and logging</title>
<link href="genivia_tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="genivia_content.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="top">
 <div id="titlearea">
  <table height="72px" width="100%" cellspacing="0" cellpadding="0">
   <tbody>
    <tr>
     <td width="10%">&nbsp;</td>
     <td width="175px"><a href="https://www.genivia.com"><img alt="Genivia" src="GeniviaLogo2_trans_noslogan.png"/></a></td>
     <td class="tab_home"><a href="https://www.genivia.com">Home</a></td>
     <td class="tab_home"><a href="https://www.genivia.com/docs.html">Documentation</a></td>
     <td>
      <div style="float: right; font-size: 18px; font-weight: bold;">Debugging and logging</div>
      <br>
      <div style="float: right; font-size: 10px;">updated Thu Dec 23 2021 by Robert van Engelen</div>
     </td>
     <td width="10%">&nbsp;</td>
    </tr>
   </tbody>
  </table>
 </div>
<!-- Generated by Doxygen 1.8.11 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__group__debug.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Debugging and logging</div>  </div>
</div><!--header-->
<div class="contents">

<p>This module defines compile-time flags and functions for run-time debugging and logging.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gad72dbcf6d0153db1b8d8a58001feed83"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83">DEBUG</a></td></tr>
<tr class="memdesc:gad72dbcf6d0153db1b8d8a58001feed83"><td class="mdescLeft">&#160;</td><td class="mdescRight">User-definable macro to enable debugging and logging.  <a href="#gad72dbcf6d0153db1b8d8a58001feed83">More...</a><br /></td></tr>
<tr class="separator:gad72dbcf6d0153db1b8d8a58001feed83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafb8f9e482dad215431176d379369344c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#gafb8f9e482dad215431176d379369344c">SOAP_DEBUG</a></td></tr>
<tr class="memdesc:gafb8f9e482dad215431176d379369344c"><td class="mdescLeft">&#160;</td><td class="mdescRight">User-definable macro, identical behavior as <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code> but more portable.  <a href="#gafb8f9e482dad215431176d379369344c">More...</a><br /></td></tr>
<tr class="separator:gafb8f9e482dad215431176d379369344c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga245426f6e253f0d00529a2b72447b956"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#ga245426f6e253f0d00529a2b72447b956">DEBUG_STAMP</a></td></tr>
<tr class="memdesc:ga245426f6e253f0d00529a2b72447b956"><td class="mdescLeft">&#160;</td><td class="mdescRight">User-definable macro to enable debugging and logging with time stamps.  <a href="#ga245426f6e253f0d00529a2b72447b956">More...</a><br /></td></tr>
<tr class="separator:ga245426f6e253f0d00529a2b72447b956"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab9e34ba8fb127ddf35b3d66bd14fc683"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#gab9e34ba8fb127ddf35b3d66bd14fc683">SOAP_MEM_DEBUG</a></td></tr>
<tr class="memdesc:gab9e34ba8fb127ddf35b3d66bd14fc683"><td class="mdescLeft">&#160;</td><td class="mdescRight">User-definable macro to enable memory debugging without logging.  <a href="#gab9e34ba8fb127ddf35b3d66bd14fc683">More...</a><br /></td></tr>
<tr class="separator:gab9e34ba8fb127ddf35b3d66bd14fc683"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga3cc1cddba7dcbc38cdb1bc66c4e08fec"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#ga3cc1cddba7dcbc38cdb1bc66c4e08fec">soap_set_recv_logfile</a> (struct <a class="el" href="structsoap.html">soap</a> *<a class="el" href="structsoap.html">soap</a>, const char *logfile)</td></tr>
<tr class="memdesc:ga3cc1cddba7dcbc38cdb1bc66c4e08fec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specify a file name to save messages received.  <a href="#ga3cc1cddba7dcbc38cdb1bc66c4e08fec">More...</a><br /></td></tr>
<tr class="separator:ga3cc1cddba7dcbc38cdb1bc66c4e08fec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga95729c28f712cf4bca312595b5ce2687"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#ga95729c28f712cf4bca312595b5ce2687">soap_set_sent_logfile</a> (struct <a class="el" href="structsoap.html">soap</a> *<a class="el" href="structsoap.html">soap</a>, const char *logfile)</td></tr>
<tr class="memdesc:ga95729c28f712cf4bca312595b5ce2687"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specify a file name to save messages sent.  <a href="#ga95729c28f712cf4bca312595b5ce2687">More...</a><br /></td></tr>
<tr class="separator:ga95729c28f712cf4bca312595b5ce2687"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga409ebe1fb5f1044a20ad12b382068148"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#ga409ebe1fb5f1044a20ad12b382068148">soap_set_test_logfile</a> (struct <a class="el" href="structsoap.html">soap</a> *<a class="el" href="structsoap.html">soap</a>, const char *logfile)</td></tr>
<tr class="memdesc:ga409ebe1fb5f1044a20ad12b382068148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specify a file name to save debugging info.  <a href="#ga409ebe1fb5f1044a20ad12b382068148">More...</a><br /></td></tr>
<tr class="separator:ga409ebe1fb5f1044a20ad12b382068148"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa04b3b63c8ba47da5673fbafe385e9ad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#gaa04b3b63c8ba47da5673fbafe385e9ad">soap_set_logging_inbound</a> (struct <a class="el" href="structsoap.html">soap</a> *<a class="el" href="structsoap.html">soap</a>, FILE *fd)</td></tr>
<tr class="memdesc:gaa04b3b63c8ba47da5673fbafe385e9ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specify inbound message logging with the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin.  <a href="#gaa04b3b63c8ba47da5673fbafe385e9ad">More...</a><br /></td></tr>
<tr class="separator:gaa04b3b63c8ba47da5673fbafe385e9ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga08a67e8989dc849602b61e438a7f86e2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#ga08a67e8989dc849602b61e438a7f86e2">soap_set_logging_outbound</a> (struct <a class="el" href="structsoap.html">soap</a> *<a class="el" href="structsoap.html">soap</a>, FILE *fd)</td></tr>
<tr class="memdesc:ga08a67e8989dc849602b61e438a7f86e2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specify outbound message logging with the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin.  <a href="#ga08a67e8989dc849602b61e438a7f86e2">More...</a><br /></td></tr>
<tr class="separator:ga08a67e8989dc849602b61e438a7f86e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga628bfc4b7a6ba4bef23bea4787ef5f5d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#ga628bfc4b7a6ba4bef23bea4787ef5f5d">soap_logging_stats</a> (struct <a class="el" href="structsoap.html">soap</a> *<a class="el" href="structsoap.html">soap</a>, size_t *sent, size_t *recv)</td></tr>
<tr class="memdesc:ga628bfc4b7a6ba4bef23bea4787ef5f5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Collect messaging statistics with the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin.  <a href="#ga628bfc4b7a6ba4bef23bea4787ef5f5d">More...</a><br /></td></tr>
<tr class="separator:ga628bfc4b7a6ba4bef23bea4787ef5f5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4965a2d58aec4ae3983ae73fc711df60"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#ga4965a2d58aec4ae3983ae73fc711df60">soap_reset_logging_stats</a> (struct <a class="el" href="structsoap.html">soap</a> *<a class="el" href="structsoap.html">soap</a>)</td></tr>
<tr class="memdesc:ga4965a2d58aec4ae3983ae73fc711df60"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset messaging statistics with the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin.  <a href="#ga4965a2d58aec4ae3983ae73fc711df60">More...</a><br /></td></tr>
<tr class="separator:ga4965a2d58aec4ae3983ae73fc711df60"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac637945d0869d91a4b00dc1ddaced537"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537">logging</a> (struct <a class="el" href="structsoap.html">soap</a> *, struct soap_plugin *, void *)</td></tr>
<tr class="memdesc:gac637945d0869d91a4b00dc1ddaced537"><td class="mdescLeft">&#160;</td><td class="mdescRight">The logging plugin registration function.  <a href="#gac637945d0869d91a4b00dc1ddaced537">More...</a><br /></td></tr>
<tr class="separator:gac637945d0869d91a4b00dc1ddaced537"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>This module defines compile-time flags and functions for run-time debugging and logging. </p>
<p>This module defines the following compile-time flags and functions to specify log files:</p><ul>
<li><code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code></li>
<li><code><a class="el" href="group__group__debug.html#gafb8f9e482dad215431176d379369344c" title="User-definable macro, identical behavior as DEBUG but more portable. ">SOAP_DEBUG</a></code></li>
<li><code><a class="el" href="group__group__debug.html#ga245426f6e253f0d00529a2b72447b956" title="User-definable macro to enable debugging and logging with time stamps. ">DEBUG_STAMP</a></code></li>
<li><code><a class="el" href="group__group__debug.html#gab9e34ba8fb127ddf35b3d66bd14fc683" title="User-definable macro to enable memory debugging without logging. ">SOAP_MEM_DEBUG</a></code></li>
<li><code><a class="el" href="group__group__debug.html#ga3cc1cddba7dcbc38cdb1bc66c4e08fec" title="Specify a file name to save messages received. ">soap_set_recv_logfile</a></code></li>
<li><code><a class="el" href="group__group__debug.html#ga95729c28f712cf4bca312595b5ce2687" title="Specify a file name to save messages sent. ">soap_set_sent_logfile</a></code></li>
<li><code><a class="el" href="group__group__debug.html#ga409ebe1fb5f1044a20ad12b382068148" title="Specify a file name to save debugging info. ">soap_set_test_logfile</a></code></li>
</ul>
<p>Alternatively, the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin can be used without setting <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code> to efficiently log messages and collect statistics:</p><ul>
<li><code><a class="el" href="group__group__debug.html#gaa04b3b63c8ba47da5673fbafe385e9ad" title="Specify inbound message logging with the logging plugin. ">soap_set_logging_inbound</a></code></li>
<li><code><a class="el" href="group__group__debug.html#ga08a67e8989dc849602b61e438a7f86e2" title="Specify outbound message logging with the logging plugin. ">soap_set_logging_outbound</a></code></li>
<li><code><a class="el" href="group__group__debug.html#ga628bfc4b7a6ba4bef23bea4787ef5f5d" title="Collect messaging statistics with the logging plugin. ">soap_logging_stats</a></code></li>
<li><code><a class="el" href="group__group__debug.html#ga4965a2d58aec4ae3983ae73fc711df60" title="Reset messaging statistics with the logging plugin. ">soap_reset_logging_stats</a></code> </li>
</ul>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="gad72dbcf6d0153db1b8d8a58001feed83"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define DEBUG</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>User-definable macro to enable debugging and logging. </p>
<p>When this macro is defined at compile time (undefined by default), the engine runs in debug mode to produce <code>RECV.log</code>, <code>SENT.log</code>, and <code>TEST.log</code> files for debugging purposes:</p><ul>
<li><code>RECV.log</code> contains messages received, concatenated</li>
<li><code>SENT.log</code> contains messages sent, concatenated</li>
<li><code>TEST.log</code> contains debugging information to identify issues Debugging with <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code> incurs significant run-time overhead and should only be used for debugging purposes.</li>
</ul>
<dl class="section user"><dt>Example:</dt><dd><pre class="fragment">c++ -D DEBUG -o client stdsoap2.cpp soapC.cpp soapClient.cpp client.cpp
./client
ls *.log
RECV.log SENT.log TEST.log
</pre></dd></dl>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#gafb8f9e482dad215431176d379369344c" title="User-definable macro, identical behavior as DEBUG but more portable. ">SOAP_DEBUG</a></code>, <code><a class="el" href="group__group__debug.html#ga245426f6e253f0d00529a2b72447b956" title="User-definable macro to enable debugging and logging with time stamps. ">DEBUG_STAMP</a></code>, <code><a class="el" href="group__group__debug.html#gab9e34ba8fb127ddf35b3d66bd14fc683" title="User-definable macro to enable memory debugging without logging. ">SOAP_MEM_DEBUG</a></code>, <code><a class="el" href="group__group__debug.html#ga3cc1cddba7dcbc38cdb1bc66c4e08fec" title="Specify a file name to save messages received. ">soap_set_recv_logfile</a></code>, <code><a class="el" href="group__group__debug.html#ga95729c28f712cf4bca312595b5ce2687" title="Specify a file name to save messages sent. ">soap_set_sent_logfile</a></code>, <code><a class="el" href="group__group__debug.html#ga409ebe1fb5f1044a20ad12b382068148" title="Specify a file name to save debugging info. ">soap_set_test_logfile</a></code> and the message <a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a> plugin <em><code>gsoap/plugin/logging.c</code></em> as a faster alternative.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>The libgsoap, libgsoap++, libgsoapssl and libgsoapssl++ libraries should not be used when a project is (re)compiled with <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>, because these libraries are built by default without debugging enabled. Use <code>./configure --enable-debug</code> to rebuild the libraries with <code>-D DEBUG</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga245426f6e253f0d00529a2b72447b956"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define DEBUG_STAMP</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>User-definable macro to enable debugging and logging with time stamps. </p>
<p>When this macro is defined at compile time (undefined by default), the engine runs in debug mode to produce <code>RECV.log</code>, <code>SENT.log</code>, and <code>TEST.log</code> files with time stamps for debugging purposes:</p><ul>
<li><code>RECV.log</code> contains messages received, concatenated</li>
<li><code>SENT.log</code> contains messages sent, concatenated</li>
<li><code>TEST.log</code> contains debugging information with time stamps to identify issues This incurs significant run-time overhead and should only be used for debugging purposes.</li>
</ul>
<dl class="section user"><dt>Example:</dt><dd><pre class="fragment">c++ -D DEBUG_STAMP -o client stdsoap2.cpp soapC.cpp soapClient.cpp client.cpp
./client
ls *.log
RECV.log SENT.log TEST.log
</pre></dd></dl>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>, <code><a class="el" href="group__group__debug.html#gafb8f9e482dad215431176d379369344c" title="User-definable macro, identical behavior as DEBUG but more portable. ">SOAP_DEBUG</a></code>, <code><a class="el" href="group__group__debug.html#gab9e34ba8fb127ddf35b3d66bd14fc683" title="User-definable macro to enable memory debugging without logging. ">SOAP_MEM_DEBUG</a></code>, <code><a class="el" href="group__group__debug.html#ga3cc1cddba7dcbc38cdb1bc66c4e08fec" title="Specify a file name to save messages received. ">soap_set_recv_logfile</a></code>, <code><a class="el" href="group__group__debug.html#ga95729c28f712cf4bca312595b5ce2687" title="Specify a file name to save messages sent. ">soap_set_sent_logfile</a></code>, <code><a class="el" href="group__group__debug.html#ga409ebe1fb5f1044a20ad12b382068148" title="Specify a file name to save debugging info. ">soap_set_test_logfile</a></code> and the message <a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a> plugin <em><code>gsoap/plugin/logging.c</code></em> as a faster alternative.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>The libgsoap, libgsoap++, libgsoapssl and libgsoapssl++ libraries should not be used when a project is (re)compiled with <code><a class="el" href="group__group__debug.html#ga245426f6e253f0d00529a2b72447b956" title="User-definable macro to enable debugging and logging with time stamps. ">DEBUG_STAMP</a></code>, because these libraries are built by default without debugging enabled. </dd></dl>

</div>
</div>
<a class="anchor" id="gafb8f9e482dad215431176d379369344c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SOAP_DEBUG</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>User-definable macro, identical behavior as <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code> but more portable. </p>
<p>This macro should be used when the <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code> macro is reserved by the IDE for other purposes.</p>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>, <code><a class="el" href="group__group__debug.html#ga245426f6e253f0d00529a2b72447b956" title="User-definable macro to enable debugging and logging with time stamps. ">DEBUG_STAMP</a></code>, <code><a class="el" href="group__group__debug.html#gab9e34ba8fb127ddf35b3d66bd14fc683" title="User-definable macro to enable memory debugging without logging. ">SOAP_MEM_DEBUG</a></code>, <code><a class="el" href="group__group__debug.html#ga3cc1cddba7dcbc38cdb1bc66c4e08fec" title="Specify a file name to save messages received. ">soap_set_recv_logfile</a></code>, <code><a class="el" href="group__group__debug.html#ga95729c28f712cf4bca312595b5ce2687" title="Specify a file name to save messages sent. ">soap_set_sent_logfile</a></code>, <code><a class="el" href="group__group__debug.html#ga409ebe1fb5f1044a20ad12b382068148" title="Specify a file name to save debugging info. ">soap_set_test_logfile</a></code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gab9e34ba8fb127ddf35b3d66bd14fc683"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SOAP_MEM_DEBUG</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>User-definable macro to enable memory debugging without logging. </p>
<p>When this macro is defined at compile time (undefined by default), the engine runs in debug mode to detect memory corruption errors but does not produce <code>RECV.log</code>, <code>SENT.log</code> and <code>TEST.log</code> files and avoids the significant run-time overhead of logging. Use this macro when memory debugging is required without logging overhead.</p>
<dl class="section user"><dt>Example:</dt><dd><pre class="fragment">c++ -D SOAP_MEM_DEBUG -o client stdsoap2.cpp soapC.cpp soapClient.cpp client.cpp
./client
ls *.log
ls: No match.
</pre></dd></dl>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>, <code><a class="el" href="group__group__debug.html#gafb8f9e482dad215431176d379369344c" title="User-definable macro, identical behavior as DEBUG but more portable. ">SOAP_DEBUG</a></code>, <code><a class="el" href="group__group__debug.html#ga245426f6e253f0d00529a2b72447b956" title="User-definable macro to enable debugging and logging with time stamps. ">DEBUG_STAMP</a></code>.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>The libgsoap, libgsoap++, libgsoapssl and libgsoapssl++ libraries should not be used when a project is (re)compiled with <code><a class="el" href="group__group__debug.html#gab9e34ba8fb127ddf35b3d66bd14fc683" title="User-definable macro to enable memory debugging without logging. ">SOAP_MEM_DEBUG</a></code>, because these libraries are built by default without debugging enabled. </dd></dl>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gac637945d0869d91a4b00dc1ddaced537"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int logging </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structsoap.html">soap</a> *&#160;</td>
          <td class="paramname">, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct soap_plugin *&#160;</td>
          <td class="paramname">, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname">&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The logging plugin registration function. </p>
<p>The logging plugin API is declared and defined in <em><code>gsoap/plugin/logging.h</code></em> and <em><code>gsoap/plugin/logging.c</code></em>.</p>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#gaa04b3b63c8ba47da5673fbafe385e9ad" title="Specify inbound message logging with the logging plugin. ">soap_set_logging_inbound</a></code>, <code><a class="el" href="group__group__debug.html#ga08a67e8989dc849602b61e438a7f86e2" title="Specify outbound message logging with the logging plugin. ">soap_set_logging_outbound</a></code>, <code><a class="el" href="group__group__debug.html#ga628bfc4b7a6ba4bef23bea4787ef5f5d" title="Collect messaging statistics with the logging plugin. ">soap_logging_stats</a></code>, <code><a class="el" href="group__group__debug.html#ga4965a2d58aec4ae3983ae73fc711df60" title="Reset messaging statistics with the logging plugin. ">soap_reset_logging_stats</a></code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga628bfc4b7a6ba4bef23bea4787ef5f5d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void soap_logging_stats </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structsoap.html">soap</a> *&#160;</td>
          <td class="paramname"><em>soap</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>sent</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>recv</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Collect messaging statistics with the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin. </p>
<p>This function collects the recorded messaging statistics, namely the number of bytes received from inbound messages and the number of bytes sent to outbound messages.</p>
<dl class="section user"><dt>Example:</dt><dd></dd></dl>
<div class="fragment"><div class="line"><span class="preprocessor">#include &quot;soapH.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;plugin/logging.h&quot;</span></div><div class="line"></div><div class="line"><span class="keyword">struct </span><a class="code" href="structsoap.html">soap</a> *<a class="code" href="structsoap.html">soap</a> = <a class="code" href="group__group__context.html#ga87c20488b2dc680aaa7689b1d024989c">soap_new</a>();</div><div class="line"><a class="code" href="group__group__plugin.html#gad645e5a58ed442fe4753dcc2338c8bdb">soap_register_plugin</a>(soap, <a class="code" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537">logging</a>);</div><div class="line">... <span class="comment">// send and receive messages</span></div><div class="line"><span class="keywordtype">size_t</span> sent, recv;</div><div class="line"><a class="code" href="group__group__debug.html#ga628bfc4b7a6ba4bef23bea4787ef5f5d">soap_logging_stats</a>(soap, &amp;sent, &amp;recv);</div><div class="line">printf(<span class="stringliteral">&quot;Bytes sent = %zu bytes received = %zu\n&quot;</span>, sent, recv);</div><div class="line"><a class="code" href="group__group__debug.html#ga4965a2d58aec4ae3983ae73fc711df60">soap_reset_logging_stats</a>(soap);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>This function is declared and defined in <em><code>gsoap/plugin/logging.h</code></em> and <em><code>gsoap/plugin/logging.c</code></em> and requires the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin and does not require <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#gaa04b3b63c8ba47da5673fbafe385e9ad" title="Specify inbound message logging with the logging plugin. ">soap_set_logging_inbound</a></code>, <code><a class="el" href="group__group__debug.html#ga08a67e8989dc849602b61e438a7f86e2" title="Specify outbound message logging with the logging plugin. ">soap_set_logging_outbound</a></code>, <code><a class="el" href="group__group__debug.html#ga4965a2d58aec4ae3983ae73fc711df60" title="Reset messaging statistics with the logging plugin. ">soap_reset_logging_stats</a></code>. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">soap</td><td><code><a class="el" href="structsoap.html" title="Context with the engine state. ">soap</a></code> context </td></tr>
    <tr><td class="paramname">sent</td><td>pointer to variable to assign </td></tr>
    <tr><td class="paramname">recv</td><td>pointer to variable to assign </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga4965a2d58aec4ae3983ae73fc711df60"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void soap_reset_logging_stats </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structsoap.html">soap</a> *&#160;</td>
          <td class="paramname"><em>soap</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Reset messaging statistics with the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin. </p>
<p>This function resets the recorded messaging statistics.</p>
<dl class="section note"><dt>Note</dt><dd>This function is declared and defined in <em><code>gsoap/plugin/logging.h</code></em> and <em><code>gsoap/plugin/logging.c</code></em> and requires the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin and does not require <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#gaa04b3b63c8ba47da5673fbafe385e9ad" title="Specify inbound message logging with the logging plugin. ">soap_set_logging_inbound</a></code>, <code><a class="el" href="group__group__debug.html#ga08a67e8989dc849602b61e438a7f86e2" title="Specify outbound message logging with the logging plugin. ">soap_set_logging_outbound</a></code>, <code><a class="el" href="group__group__debug.html#ga628bfc4b7a6ba4bef23bea4787ef5f5d" title="Collect messaging statistics with the logging plugin. ">soap_logging_stats</a></code>. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">soap</td><td><code><a class="el" href="structsoap.html" title="Context with the engine state. ">soap</a></code> context </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="gaa04b3b63c8ba47da5673fbafe385e9ad"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void soap_set_logging_inbound </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structsoap.html">soap</a> *&#160;</td>
          <td class="paramname"><em>soap</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FILE *&#160;</td>
          <td class="paramname"><em>fd</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Specify inbound message logging with the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin. </p>
<p>This function enables inbound message logging. Inbound messages are recorded to the specified file descriptor. Logging is disabled by passing a NULL file descriptor parameter.</p>
<dl class="section user"><dt>Example:</dt><dd></dd></dl>
<div class="fragment"><div class="line"><span class="preprocessor">#include &quot;soapH.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;plugin/logging.h&quot;</span></div><div class="line"></div><div class="line"><span class="keyword">struct </span>soap *soap = <a class="code" href="group__group__context.html#ga87c20488b2dc680aaa7689b1d024989c">soap_new</a>();</div><div class="line">FILE *fd = <a class="code" href="group__group__callbacks.html#ga9b4985eb5a588f4c16ad88ef7ca329dc">fopen</a>(<span class="stringliteral">&quot;logs/recv.log&quot;</span>, <span class="stringliteral">&quot;w&quot;</span>);</div><div class="line"><a class="code" href="group__group__plugin.html#gad645e5a58ed442fe4753dcc2338c8bdb">soap_register_plugin</a>(soap, <a class="code" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537">logging</a>);</div><div class="line"><a class="code" href="group__group__debug.html#gaa04b3b63c8ba47da5673fbafe385e9ad">soap_set_logging_inbound</a>(soap, fd);</div><div class="line">... <span class="comment">// send and receive messages</span></div><div class="line"><a class="code" href="group__group__debug.html#gaa04b3b63c8ba47da5673fbafe385e9ad">soap_set_logging_inbound</a>(soap, NULL);</div><div class="line"><a class="code" href="group__group__callbacks.html#gab9591dd80dbb0e571784bad5421b2202">fclose</a>(fd);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>This function is declared and defined in <em><code>gsoap/plugin/logging.h</code></em> and <em><code>gsoap/plugin/logging.c</code></em> and requires the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin and does not require <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#ga08a67e8989dc849602b61e438a7f86e2" title="Specify outbound message logging with the logging plugin. ">soap_set_logging_outbound</a></code>, <code><a class="el" href="group__group__debug.html#ga628bfc4b7a6ba4bef23bea4787ef5f5d" title="Collect messaging statistics with the logging plugin. ">soap_logging_stats</a></code>, <code><a class="el" href="group__group__debug.html#ga4965a2d58aec4ae3983ae73fc711df60" title="Reset messaging statistics with the logging plugin. ">soap_reset_logging_stats</a></code>. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">soap</td><td><code><a class="el" href="structsoap.html" title="Context with the engine state. ">soap</a></code> context </td></tr>
    <tr><td class="paramname">fd</td><td>file descriptor to record inbound messages </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga08a67e8989dc849602b61e438a7f86e2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void soap_set_logging_outbound </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structsoap.html">soap</a> *&#160;</td>
          <td class="paramname"><em>soap</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FILE *&#160;</td>
          <td class="paramname"><em>fd</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Specify outbound message logging with the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin. </p>
<p>This function enables outbound message logging. Outbound messages are recorded to the specified file descriptor. Logging is disabled by passing a NULL file descriptor parameter.</p>
<dl class="section user"><dt>Example:</dt><dd></dd></dl>
<div class="fragment"><div class="line"><span class="preprocessor">#include &quot;soapH.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;plugin/logging.h&quot;</span></div><div class="line"></div><div class="line"><span class="keyword">struct </span>soap *soap = <a class="code" href="group__group__context.html#ga87c20488b2dc680aaa7689b1d024989c">soap_new</a>();</div><div class="line">FILE *fd = <a class="code" href="group__group__callbacks.html#ga9b4985eb5a588f4c16ad88ef7ca329dc">fopen</a>(<span class="stringliteral">&quot;logs/sent.log&quot;</span>, <span class="stringliteral">&quot;w&quot;</span>);</div><div class="line"><a class="code" href="group__group__plugin.html#gad645e5a58ed442fe4753dcc2338c8bdb">soap_register_plugin</a>(soap, <a class="code" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537">logging</a>);</div><div class="line"><a class="code" href="group__group__debug.html#ga08a67e8989dc849602b61e438a7f86e2">soap_set_logging_outbound</a>(soap, fd);</div><div class="line">... <span class="comment">// send and receive messages</span></div><div class="line"><a class="code" href="group__group__debug.html#ga08a67e8989dc849602b61e438a7f86e2">soap_set_logging_outbound</a>(soap, NULL);</div><div class="line"><a class="code" href="group__group__callbacks.html#gab9591dd80dbb0e571784bad5421b2202">fclose</a>(fd);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>This function is declared and defined in <em><code>gsoap/plugin/logging.h</code></em> and <em><code>gsoap/plugin/logging.c</code></em> and requires the <code><a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a></code> plugin and does not require <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#gaa04b3b63c8ba47da5673fbafe385e9ad" title="Specify inbound message logging with the logging plugin. ">soap_set_logging_inbound</a></code>, <code><a class="el" href="group__group__debug.html#ga628bfc4b7a6ba4bef23bea4787ef5f5d" title="Collect messaging statistics with the logging plugin. ">soap_logging_stats</a></code>, <code><a class="el" href="group__group__debug.html#ga4965a2d58aec4ae3983ae73fc711df60" title="Reset messaging statistics with the logging plugin. ">soap_reset_logging_stats</a></code>. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">soap</td><td><code><a class="el" href="structsoap.html" title="Context with the engine state. ">soap</a></code> context </td></tr>
    <tr><td class="paramname">fd</td><td>file descriptor to record outbound messages </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga3cc1cddba7dcbc38cdb1bc66c4e08fec"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void soap_set_recv_logfile </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structsoap.html">soap</a> *&#160;</td>
          <td class="paramname"><em>soap</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>logfile</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Specify a file name to save messages received. </p>
<p>This function sets the specified file path name <code>logfile</code> to save all messages received. Messages are appended to the specified file. Disables logging when <code>logfile</code> is NULL. This function requires compilation with <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>.</p>
<dl class="section user"><dt>Example:</dt><dd></dd></dl>
<div class="fragment"><div class="line"><span class="preprocessor">#include &quot;soapH.h&quot;</span></div><div class="line"></div><div class="line"><span class="keyword">struct </span>soap *soap = <a class="code" href="group__group__context.html#ga87c20488b2dc680aaa7689b1d024989c">soap_new</a>();</div><div class="line"><a class="code" href="group__group__debug.html#ga3cc1cddba7dcbc38cdb1bc66c4e08fec">soap_set_recv_logfile</a>(soap, <span class="stringliteral">&quot;logs/thread_1_recv.log&quot;</span>);</div><div class="line"><a class="code" href="group__group__debug.html#ga95729c28f712cf4bca312595b5ce2687">soap_set_sent_logfile</a>(soap, <span class="stringliteral">&quot;logs/thread_1_sent.log&quot;</span>);</div><div class="line"><a class="code" href="group__group__debug.html#ga409ebe1fb5f1044a20ad12b382068148">soap_set_test_logfile</a>(soap, <span class="stringliteral">&quot;logs/thread_1_test.log&quot;</span>);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Requires compilation with <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#ga95729c28f712cf4bca312595b5ce2687" title="Specify a file name to save messages sent. ">soap_set_sent_logfile</a></code> and the message <a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a> plugin <em><code>gsoap/plugin/logging.c</code></em> as a faster alternative. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">soap</td><td><code><a class="el" href="structsoap.html" title="Context with the engine state. ">soap</a></code> context </td></tr>
    <tr><td class="paramname">logfile</td><td>path name of the log file or NULL to disable logging </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga95729c28f712cf4bca312595b5ce2687"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void soap_set_sent_logfile </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structsoap.html">soap</a> *&#160;</td>
          <td class="paramname"><em>soap</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>logfile</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Specify a file name to save messages sent. </p>
<p>This function sets the specified file path name <code>logfile</code> to save the messages sent. Messages are appended to the specified file. Disables logging when <code>logfile</code> is NULL. This function requires compilation with <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>.</p>
<dl class="section user"><dt>Example:</dt><dd></dd></dl>
<div class="fragment"><div class="line"><span class="preprocessor">#include &quot;soapH.h&quot;</span></div><div class="line"></div><div class="line"><span class="keyword">struct </span>soap *soap = <a class="code" href="group__group__context.html#ga87c20488b2dc680aaa7689b1d024989c">soap_new</a>();</div><div class="line"><a class="code" href="group__group__debug.html#ga3cc1cddba7dcbc38cdb1bc66c4e08fec">soap_set_recv_logfile</a>(soap, <span class="stringliteral">&quot;logs/thread_1_recv.log&quot;</span>);</div><div class="line"><a class="code" href="group__group__debug.html#ga95729c28f712cf4bca312595b5ce2687">soap_set_sent_logfile</a>(soap, <span class="stringliteral">&quot;logs/thread_1_sent.log&quot;</span>);</div><div class="line"><a class="code" href="group__group__debug.html#ga409ebe1fb5f1044a20ad12b382068148">soap_set_test_logfile</a>(soap, <span class="stringliteral">&quot;logs/thread_1_test.log&quot;</span>);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Requires compilation with <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><code><a class="el" href="group__group__debug.html#ga3cc1cddba7dcbc38cdb1bc66c4e08fec" title="Specify a file name to save messages received. ">soap_set_recv_logfile</a></code> and the message <a class="el" href="group__group__debug.html#gac637945d0869d91a4b00dc1ddaced537" title="The logging plugin registration function. ">logging</a> plugin <em><code>gsoap/plugin/logging.c</code></em> as a faster alternative. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">soap</td><td><code><a class="el" href="structsoap.html" title="Context with the engine state. ">soap</a></code> context </td></tr>
    <tr><td class="paramname">logfile</td><td>path name of the log file or NULL to disable logging </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga409ebe1fb5f1044a20ad12b382068148"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void soap_set_test_logfile </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structsoap.html">soap</a> *&#160;</td>
          <td class="paramname"><em>soap</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>logfile</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Specify a file name to save debugging info. </p>
<p>This function sets the specified file path name <code>logfile</code> to save debugging info generated by the engine and by the generated code. Disables logging when <code>logfile</code> is NULL. This function requires compilation with <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>.</p>
<dl class="section user"><dt>Example:</dt><dd></dd></dl>
<div class="fragment"><div class="line"><span class="preprocessor">#include &quot;soapH.h&quot;</span></div><div class="line"></div><div class="line"><span class="keyword">struct </span>soap *soap = <a class="code" href="group__group__context.html#ga87c20488b2dc680aaa7689b1d024989c">soap_new</a>();</div><div class="line"><a class="code" href="group__group__debug.html#ga3cc1cddba7dcbc38cdb1bc66c4e08fec">soap_set_recv_logfile</a>(soap, <span class="stringliteral">&quot;logs/thread_1_recv.log&quot;</span>);</div><div class="line"><a class="code" href="group__group__debug.html#ga95729c28f712cf4bca312595b5ce2687">soap_set_sent_logfile</a>(soap, <span class="stringliteral">&quot;logs/thread_1_sent.log&quot;</span>);</div><div class="line"><a class="code" href="group__group__debug.html#ga409ebe1fb5f1044a20ad12b382068148">soap_set_test_logfile</a>(soap, <span class="stringliteral">&quot;logs/thread_1_test.log&quot;</span>);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Requires compilation with <code><a class="el" href="group__group__debug.html#gad72dbcf6d0153db1b8d8a58001feed83" title="User-definable macro to enable debugging and logging. ">DEBUG</a></code>. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">soap</td><td><code><a class="el" href="structsoap.html" title="Context with the engine state. ">soap</a></code> context </td></tr>
    <tr><td class="paramname">logfile</td><td>path name of the log file or NULL to disable logging </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<hr class="footer">
<address class="footer">
Copyright (C) 2021, Robert van Engelen, Genivia Inc., All Rights Reserved.
</address>
<address class="footer"><small>
Converted on Thu Dec 23 2021 13:46:46 by <a target="_blank" href="http://www.doxygen.org/index.html">Doxygen</a> 1.8.11</small></address>
<br>
<div style="height: 246px; background: #DBDBDB;">
</body>
</html>
